home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / drivers / media / video / cafe_ccic-regs.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  6.7 KB  |  167 lines

  1. /*
  2.  * Register definitions for the m88alp01 camera interface.  Offsets in bytes
  3.  * as given in the spec.
  4.  *
  5.  * Copyright 2006 One Laptop Per Child Association, Inc.
  6.  *
  7.  * Written by Jonathan Corbet, corbet@lwn.net.
  8.  *
  9.  * This file may be distributed under the terms of the GNU General
  10.  * Public License, version 2.
  11.  */
  12. #define REG_Y0BAR    0x00
  13. #define REG_Y1BAR    0x04
  14. #define REG_Y2BAR    0x08
  15. /* ... */
  16.  
  17. #define REG_IMGPITCH    0x24    /* Image pitch register */
  18. #define   IMGP_YP_SHFT      2        /* Y pitch params */
  19. #define   IMGP_YP_MASK      0x00003ffc    /* Y pitch field */
  20. #define      IMGP_UVP_SHFT      18        /* UV pitch (planar) */
  21. #define   IMGP_UVP_MASK   0x3ffc0000
  22. #define REG_IRQSTATRAW    0x28    /* RAW IRQ Status */
  23. #define   IRQ_EOF0      0x00000001    /* End of frame 0 */
  24. #define   IRQ_EOF1      0x00000002    /* End of frame 1 */
  25. #define   IRQ_EOF2      0x00000004    /* End of frame 2 */
  26. #define   IRQ_SOF0      0x00000008    /* Start of frame 0 */
  27. #define   IRQ_SOF1      0x00000010    /* Start of frame 1 */
  28. #define   IRQ_SOF2      0x00000020    /* Start of frame 2 */
  29. #define   IRQ_OVERFLOW      0x00000040    /* FIFO overflow */
  30. #define   IRQ_TWSIW      0x00010000    /* TWSI (smbus) write */
  31. #define   IRQ_TWSIR      0x00020000    /* TWSI read */
  32. #define   IRQ_TWSIE      0x00040000    /* TWSI error */
  33. #define   TWSIIRQS (IRQ_TWSIW|IRQ_TWSIR|IRQ_TWSIE)
  34. #define   FRAMEIRQS (IRQ_EOF0|IRQ_EOF1|IRQ_EOF2|IRQ_SOF0|IRQ_SOF1|IRQ_SOF2)
  35. #define   ALLIRQS (TWSIIRQS|FRAMEIRQS|IRQ_OVERFLOW)
  36. #define REG_IRQMASK    0x2c    /* IRQ mask - same bits as IRQSTAT */
  37. #define REG_IRQSTAT    0x30    /* IRQ status / clear */
  38.  
  39. #define REG_IMGSIZE    0x34    /* Image size */
  40. #define  IMGSZ_V_MASK      0x1fff0000
  41. #define  IMGSZ_V_SHIFT      16
  42. #define     IMGSZ_H_MASK      0x00003fff
  43. #define REG_IMGOFFSET    0x38    /* IMage offset */
  44.  
  45. #define REG_CTRL0    0x3c    /* Control 0 */
  46. #define   C0_ENABLE      0x00000001    /* Makes the whole thing go */
  47.  
  48. /* Mask for all the format bits */
  49. #define   C0_DF_MASK      0x00fffffc    /* Bits 2-23 */
  50.  
  51. /* RGB ordering */
  52. #define   C0_RGB4_RGBX      0x00000000
  53. #define      C0_RGB4_XRGB      0x00000004
  54. #define      C0_RGB4_BGRX      0x00000008
  55. #define   C0_RGB4_XBGR      0x0000000c
  56. #define   C0_RGB5_RGGB      0x00000000
  57. #define      C0_RGB5_GRBG      0x00000004
  58. #define      C0_RGB5_GBRG      0x00000008
  59. #define   C0_RGB5_BGGR      0x0000000c
  60.  
  61. /* Spec has two fields for DIN and DOUT, but they must match, so
  62.    combine them here. */
  63. #define   C0_DF_YUV      0x00000000    /* Data is YUV        */
  64. #define   C0_DF_RGB      0x000000a0    /* ... RGB            */
  65. #define   C0_DF_BAYER     0x00000140    /* ... Bayer                */
  66. /* 8-8-8 must be missing from the below - ask */
  67. #define   C0_RGBF_565      0x00000000
  68. #define   C0_RGBF_444      0x00000800
  69. #define   C0_RGB_BGR      0x00001000    /* Blue comes first */
  70. #define   C0_YUV_PLANAR      0x00000000    /* YUV 422 planar format */
  71. #define   C0_YUV_PACKED      0x00008000    /* YUV 422 packed    */
  72. #define   C0_YUV_420PL      0x0000a000    /* YUV 420 planar    */
  73. /* Think that 420 packed must be 111 - ask */
  74. #define      C0_YUVE_YUYV      0x00000000    /* Y1CbY0Cr         */
  75. #define      C0_YUVE_YVYU      0x00010000    /* Y1CrY0Cb         */
  76. #define      C0_YUVE_VYUY      0x00020000    /* CrY1CbY0         */
  77. #define      C0_YUVE_UYVY      0x00030000    /* CbY1CrY0         */
  78. #define   C0_YUVE_XYUV      0x00000000    /* 420: .YUV        */
  79. #define      C0_YUVE_XYVU      0x00010000    /* 420: .YVU         */
  80. #define      C0_YUVE_XUVY      0x00020000    /* 420: .UVY         */
  81. #define      C0_YUVE_XVUY      0x00030000    /* 420: .VUY         */
  82. /* Bayer bits 18,19 if needed */
  83. #define   C0_HPOL_LOW      0x01000000    /* HSYNC polarity active low */
  84. #define   C0_VPOL_LOW      0x02000000    /* VSYNC polarity active low */
  85. #define   C0_VCLK_LOW      0x04000000    /* VCLK on falling edge */
  86. #define   C0_DOWNSCALE      0x08000000    /* Enable downscaler */
  87. #define      C0_SIFM_MASK      0xc0000000    /* SIF mode bits */
  88. #define   C0_SIF_HVSYNC      0x00000000    /* Use H/VSYNC */
  89. #define   CO_SOF_NOSYNC      0x40000000    /* Use inband active signaling */
  90.  
  91.  
  92. #define REG_CTRL1    0x40    /* Control 1 */
  93. #define   C1_444ALPHA      0x00f00000    /* Alpha field in RGB444 */
  94. #define   C1_ALPHA_SHFT      20
  95. #define   C1_DMAB32      0x00000000    /* 32-byte DMA burst */
  96. #define   C1_DMAB16      0x02000000    /* 16-byte DMA burst */
  97. #define      C1_DMAB64      0x04000000    /* 64-byte DMA burst */
  98. #define      C1_DMAB_MASK      0x06000000
  99. #define   C1_TWOBUFS      0x08000000    /* Use only two DMA buffers */
  100. #define   C1_PWRDWN      0x10000000    /* Power down */
  101.  
  102. #define REG_CLKCTRL    0x88    /* Clock control */
  103. #define   CLK_DIV_MASK      0x0000ffff    /* Upper bits RW "reserved" */
  104.  
  105. #define REG_GPR        0xb4    /* General purpose register.  This
  106.                    controls inputs to the power and reset
  107.                    pins on the OV7670 used with OLPC;
  108.                    other deployments could differ.  */
  109. #define   GPR_C1EN      0x00000020    /* Pad 1 (power down) enable */
  110. #define   GPR_C0EN      0x00000010    /* Pad 0 (reset) enable */
  111. #define      GPR_C1      0x00000002    /* Control 1 value */
  112. /*
  113.  * Control 0 is wired to reset on OLPC machines.  For ov7x sensors,
  114.  * it is active low, for 0v6x, instead, it's active high.  What
  115.  * fun.
  116.  */
  117. #define   GPR_C0      0x00000001    /* Control 0 value */
  118.  
  119. #define REG_TWSIC0    0xb8    /* TWSI (smbus) control 0 */
  120. #define   TWSIC0_EN       0x00000001    /* TWSI enable */
  121. #define   TWSIC0_MODE      0x00000002    /* 1 = 16-bit, 0 = 8-bit */
  122. #define   TWSIC0_SID      0x000003fc    /* Slave ID */
  123. #define   TWSIC0_SID_SHIFT 2
  124. #define   TWSIC0_CLKDIV   0x0007fc00    /* Clock divider */
  125. #define   TWSIC0_MASKACK  0x00400000    /* Mask ack from sensor */
  126. #define   TWSIC0_OVMAGIC  0x00800000    /* Make it work on OV sensors */
  127.  
  128. #define REG_TWSIC1    0xbc    /* TWSI control 1 */
  129. #define   TWSIC1_DATA      0x0000ffff    /* Data to/from camchip */
  130. #define   TWSIC1_ADDR      0x00ff0000    /* Address (register) */
  131. #define   TWSIC1_ADDR_SHIFT 16
  132. #define   TWSIC1_READ      0x01000000    /* Set for read op */
  133. #define   TWSIC1_WSTAT      0x02000000    /* Write status */
  134. #define   TWSIC1_RVALID      0x04000000    /* Read data valid */
  135. #define   TWSIC1_ERROR      0x08000000    /* Something screwed up */
  136.  
  137.  
  138. #define REG_UBAR    0xc4    /* Upper base address register */
  139.  
  140. /*
  141.  * Here's the weird global control registers which are said to live
  142.  * way up here.
  143.  */
  144. #define REG_GL_CSR     0x3004  /* Control/status register */
  145. #define   GCSR_SRS     0x00000001    /* SW Reset set */
  146. #define   GCSR_SRC       0x00000002    /* SW Reset clear */
  147. #define      GCSR_MRS     0x00000004    /* Master reset set */
  148. #define      GCSR_MRC     0x00000008    /* HW Reset clear */
  149. #define   GCSR_CCIC_EN   0x00004000    /* CCIC Clock enable */
  150. #define REG_GL_IMASK   0x300c  /* Interrupt mask register */
  151. #define   GIMSK_CCIC_EN          0x00000004    /* CCIC Interrupt enable */
  152.  
  153. #define REG_GL_FCR    0x3038  /* GPIO functional control register */
  154. #define      GFCR_GPIO_ON      0x08        /* Camera GPIO enabled */
  155. #define REG_GL_GPIOR    0x315c    /* GPIO register */
  156. #define   GGPIO_OUT          0x80000    /* GPIO output */
  157. #define   GGPIO_VAL          0x00008    /* Output pin value */
  158.  
  159. #define REG_LEN                REG_GL_IMASK + 4
  160.  
  161.  
  162. /*
  163.  * Useful stuff that probably belongs somewhere global.
  164.  */
  165. #define VGA_WIDTH    640
  166. #define VGA_HEIGHT    480
  167.